package com.lancoo.answer.util

import android.content.Context
import android.util.Log
import com.opensource.svgaplayer.*


/**
 * describe:SVGA工具类
 * 使用时首先调用初始化数据方法，
 * 然后再调用开始动画的方法
 */
class SvgaUtils(context: Context, svgaImage: SVGAImageView) {
    private var context: Context?=null
    private var stringList: ArrayList<String>? = null
    private val svgaImage: SVGAImageView
    private var parser: SVGAParser? = null

    /**
     * 初始化数据
     */
    fun initAnimator() {
        parser = SVGAParser(context)
        stringList = ArrayList()
        //监听大动画的控件周期
        svgaImage.callback = object : SVGACallback {
            override fun onPause() {
                Log.e("setCallback", "onPause")
            }

            override fun onFinished() {
                //当动画结束，如果数组容器大于0，则移除容器第一位的数据，轮询播放动画。
                if (stringList != null && stringList!!.size > 0) {
                    stringList!!.removeAt(0)
                    //如果移除之后的容器大于0，则开始展示新一个的大动画
                    if (stringList != null && stringList!!.size > 0) {
                        try {
                            parseSVGA() //解析加载动画
                        } catch (e: Exception) {
                        }
                    } else {
                        stopSVGA()
                    }
                } else {
                    stopSVGA()
                }
            }

            override fun onRepeat() {
//                Log.e("setCallback", "onRepeat=" + stringList!!.size)
                stopSVGA()
            }

            override fun onStep(i: Int, v: Double) {}
        }
    }

    /**
     * 显示动画
     */
    fun startAnimator(svgaName: String) {
        stringList!!.add(stringList!!.size, "$svgaName.svga")
        //如果礼物容器列表的数量是1，则解析动画，如果数量不是1，则此处不解析动画，在上一个礼物解析完成之后加载再动画
        if (stringList!!.size === 1) {
            parseSVGA()
        }
    }

    /**
     * 停止动画
     */
    fun stopSVGA() {
        if (svgaImage.isAnimating && stringList!!.size === 0) {
            svgaImage.stopAnimation()
        }
    }

    /**
     * 解析加载动画
     */
    private fun parseSVGA() {
        if (stringList!!.size > 0) {
            try {
                parser!!.parse(stringList!![0], object : SVGAParser.ParseCompletion {
                    override fun onComplete(svgaVideoEntity: SVGAVideoEntity) {
                        //解析动画成功，到这里才真正的显示动画
                        val drawable = SVGADrawable(svgaVideoEntity)
                        svgaImage.setImageDrawable(drawable)
                        svgaImage.startAnimation()
                    }

                    override fun onError() {
                        //如果动画数组列表大于0,移除第一位的动画,继续循环解析
                        if (stringList!!.size > 0) {
                            stringList!!.removeAt(0)
                            parseSVGA()
                        } else {
                            stopSVGA()
                        }
                    }
                })
            } catch (e: Exception) {
            }
        } else {
            stopSVGA()
        }
    }

    init {
        this.context = context
        this.svgaImage = svgaImage
    }
}